<?php
/**地区表模型
 * @Author: 976123967@qq.com
 * @Date:   2014-08-25 23:35:24
 * @Last Modified by:   chen
 * @Last Modified time: 2014-09-02 21:59:40
 */
class CityModel extends Model{
	// 指定表名
	public $table='locality';

	// 所有地区信息
	public $city;
	// 顶级地区
	public $topCity;





	/**
	 * [$validate 自动验证]
	 * @var array
	 */
	public $validate = array(
		// 父级地区验证
		array('pid','regexp:/^\d+$/','请选择上级地区',2,3),
		// 地区名称验证
		array('lname','nonull','请输入地区名称',2,3),
		array('lname','maxlen:20','地区名称最大长度不能超过20个字符',2,3),
		
		// 分类排序
		array('sort','regexp:/^\d+$/','地区排序必须数字',3,3),
		// 显示和隐藏
		array('display','num:0,1',' 显示和隐藏状态选择错误',3,3),
	);




	/**
	 * [$auto 自动完成]
	 * @var array
	 */
	public $auto=array(
		// 分类排序
		array('sort','intval','function',2,3)
	);




	/**
	 * [get_city_all 地区树]
	 * @return [type] [description]
	 */
	public function get_city_all()
	{
		return Data::tree($this->city,'lname','lid');
	}


	/**
	 * [__init 初始化]
	 * @return [type] [description]
	 */
	public function __init()
	{
		// 读取缓存文件
		$this->city = S('city',false,0,array('dir'=>CACHE_PATH));

		$this->topCity =  S('topCity',false,0,array('dir'=>CACHE_PATH));
	}




	/**
	 * [add_city 添加]
	 */
	public function add_city()
	{
		$this->add();
		// 更新地区的缓存
		$this->update_city_cache();
	}

	/**
	 * [save_city 编辑]
	 * @return [type] [description]
	 */
	public function save_city()
	{
		$this->save();
		// 更新地区的缓存
		$this->update_city_cache();
	}

	/**
	 * [get_one 单条记录]
	 * @param  [type] $cid [description]
	 * @return [type]      [description]
	 */
	public function get_city_one($lid)
	{
		foreach($this->city as $k=>$v)
		{
			if($k==$lid)
				return $v;
		}
	}


	/**
	 * [del_city 删除分类]
	 * @param  [type] $lid [description]
	 * @return [type]      [description]
	 */
	public function del_city($lid)
	{
		// 验证
		$data = $this->get_city_one($lid);
		if(!$data)
		{
			 $this->error='地区不存在';
			 return false;
		}

		$count = $this->where(array('pid'=>$lid))->count();
		if($count)
		{
			 $this->error='请先删除子地区';
			 return false;
		}


		// 删除
		$this->delete($lid);
		
		// 更新d地区缓存
		$this->update_city_cache();
		return true;

	}


	/**
	 * [update_city_cache 更新地区缓存]
	 * @return [type] [description]
	 */
	public function update_city_cache()
	{
		// 查询所有的地区
		$city = $this->order('sort asc')->all();

		// 重新组合数组
		$temp = array();
		foreach($city as $k=>$v)
		{
			$temp[$v['lid']]=$v;
		}
		// 写缓存文件
		S('city',$temp,0,array('dir'=>CACHE_PATH));







		// 查询顶级所有的地区
		$topCity = $this->where(array('pid'=>0))->order('sort asc')->all();

		// 重新组合数组
		$temp = array();
		foreach($topCity as $k=>$v)
		{
			$temp[$v['lid']]=$v;
		}
		// 写缓存文件
		S('topCity',$temp,0,array('dir'=>CACHE_PATH));
	}


	/**
	 * [sort 排序地区]
	 * @return [type] [description]
	 */
	public function city_sort()
	{
		$lid = Q('post.lid');
		if(empty($lid))
		{
			$this->error='没有选择任何信息用于排序';
			return false;
		}

		$sort = Q('post.sort');
		foreach($lid as $k =>$v)
		{
			if(!is_numeric($sort[$k]))
			{
				$this->error='排序值只能输入数字';
				return false;
			}	
		}

		foreach($lid as $k=> $v)
		{
			$data = array('lid'=>$v,'sort'=>$sort[$k]);
			$this->update($data);
		}
		$this->update_city_cache();
		return true;
	}

	/**
	 * [get_son_city 获取子集]
	 * @param  [type] $cid [description]
	 * @return [type]      [description]
	 */
	public function get_son_city($cid)
	{
		$result = array();
		foreach($this->city as $v)
		{
			if($v['pid']==$cid)
				$result[]=$v;
		}
		return $result;
	}


	/**
	 * [get_son_city_cid 获取地区所有子集cid]
	 * @param  [type] $lid [description]
	 * @return [type]      [description]
	 */
	public function get_son_city_cid($lid)
	{
		$sonCity = $this->get_son_city($lid);
		$result = array();
		if(!$sonCity)
			return $result;
		foreach($sonCity as $v)
		{
			$result[]=$v['lid'];
		}
		return $result;
	}

}